public class No067 {
    /**
     * 将一个字符串转换成一个整数，要求不能使用字符串转换整数的库函数。
     * 数值为0或者字符串不是一个合法的数值则返回0
     */
    public int StrToInt(String str) {
        if (str.length() == 0) return 0;
        // 1. 只有正负号
        if (str.length() == 1 && (str.charAt(0) == '+' || str.charAt(0) == '-')) return 0;
        int flag = 1;
        if (str.length() > 1) {
            if (str.charAt(0) == '-') {
                flag = -1;
                str = str.substring(1);
            }
            if (str.charAt(0) == '+') str = str.substring(1);
        }
        long num = 0L;
        for (int i = 0; i < str.length(); i++) {
            char digit = str.charAt(i);
            // 2. 非法字符
            if (digit < '0' || digit > '9') return 0;
            num = num * 10 + flag * (digit - '0');
            // 3. 超出范围
            if (num > Integer.MAX_VALUE || num < Integer.MIN_VALUE) {
                return 0;
            }
        }
        return (int) num;
    }
}
